/*
    一、变量的定义的语法
    声明变量的关键字 变量名:类型注解=字面量值
    1、声明变量的关键字有：var let const
    2、变量名规范：符合标识符规范；符合驼峰式命名法；见名知意；不建议使用汉字
    3、类型注解约束了变量的类型，如果在编译阶段字面量的类型值不符合类型注解的类型，就会直接报错
    二、类型注解的分类
    1、原始类型：number/string/boolean/undefined/null/symbol
    2、object类型:对象/arry/function
    3、新增加类型：联合类型、交叉类型、接口、class、为类型取别名、泛型
    三、原始类型
    1、string:表示的是字符串，字面量值使用双引号、单引号、ES6模板字符串
    2、number:可以表示的是数字类型，可以是整数、浮点数(精度的丢失)
    3、boolean：布尔类型字面量只有两个，true:真，false：假
    4、undefined:没有变量赋初始值，在ts中undefined类型的变量只能赋值undefined本身
    5、null：这种主要用在引用数类型，如果赋值为null表示栈内存空间中没有对堆内存空间的引用，ts中null类型的值只能赋null本身
    四、Object类型
    1、对象类型
    语法：let 变量:{属性名1:类型注解,属性名2:类型注解}={属性名1:值1,属性名2：类型注解}
    2、数组类型
    存储相同类型的一块连续的内存空间
    数组定义的两种写法：
    1) let 数组变量名:数组元素的类型[]=值
    2) let 数组变量名:Array<元素的类型>=值
    五、联合类型
    一种变量可能的类型不知一种，可以是你列出的其中一种
    使用|将多个类型连接起来的
    类型1|类型2|类型3
    六、类型别名
    type 别名=联合类型
*/
let str1:string="蜗牛学苑"
let str2:string='西安蜗牛'
let stuNo:string="王金虎"
let str3:string=`蜗牛学员:${stuNo}`
let num1:number=3.1415926
let bolStatus:boolean=true
let un1:undefined
let nu2:null=null
console.log('-----------对象类型--------------');
let s1:{sno:string,age:number,score:number}={sno:"wnxaw1001",age:23,score:89}
let names:string[]=['西施','貂蝉','杨玉环','王昭君']
let boys:Array<string>=['李旭','王金虎']

type NumStrType=string|number
let students:Array<{sno:string,age:NumStrType,sname:string,phone:NumStrType}>=[
    {
        sno:'s1001',
        sname:'张晓勇',
        age:"22",
        phone:'13324567898'
    },
    {
        sno:'s1002',
        sname:'李伟杰',
        age:23,
        phone:13278987654321
    }
]







